HDFS Shell
通过命令行来进一步跟 HDFS 文件系统进行交互,可以执行所有常用的文件系统的操作,例如:读取文件、创建目录、移动文件、删除文件等等。同时可以通过 hdfs dfs -help 命令来获取每个命令的详细帮助文档。
常用的 HDFS Shell 命令
| 命令 | 功能 |
|---|---|
| -help | 显示命令的帮助信息 |
| -ls (-R) [path] | 显示当前目录下的所有文件 |
| -du (-S) [path] | 显示目录中所有的文件大小 |
| -count (-q) [path] | 显示文件中的文件数量 |
| -mv [src] [dst] | 移动多个文件到目标目录 |
| -cp [src] [dst] | 复制多个文件到目标目录 |
| -rm (-R) [path] | 删除文件(夹) |
| -put [localsrc] [dst] | 本地文件上传到 hdfs 中 |
| -copyFromLocal [localsrc] [dst] | 以 put 相同 |
| -moveFromLocal [localsrc] [dst] | 本地文件剪切到 hdfs 中 |
| -get [src] [localdst] | 从 hdfs 中下载文件到本地 |
| -getmerge [src] [localdst] | 将源目录中的所有文件排序合并到一个文件中 |
| -cat [src] | 在 hdfs 中显示文件内容 |
| -text [src] | 在 hdfs 中显示文件内容 |
| -copyToLocal [src] [localdst] | 复制到本地 |
| -moveToLocal [src] [localdst] | 移动到本地 |
| -mkdir (-p) [paths] | 创建目录 |
| -touchz [path] | 创建一个空文件 |
以下是部分命令的具体使用方法
1. mkdir 创建目录
使用方法:hdfs dfs -mkdir (-p) [paths]
# 创建 user 目录
hdfs dfs -mkdir /user
# 同时创建多个目录
hdfs dfs -mkdir /user/d1 /user/d2
# 当创建多级目录时,使用 -p 自动创建上级目录
hdfs dfs -mkdir -p /user/hadoop/dir1 /user/hadoop/dir2
2. put 上传文件
使用方法:hdfs dfs -put <localsrc> ... <dst>
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
# 单个文件上传
hdfs dfs -put b.txt /user/hadoop/dir1
# 多个文件上传
hdfs dfs -put a.xml b.xml /user/hadoop/dir1
3. ls 列出文件
使用方法:hdfs dfs -ls (-R)
# 列出 hdfs 文件系统的根目录文件
hdfs dfs -ls /
# 列出 hdfs 文件系统所有的目录和文件
hdfs dfs -ls -R /
4. text、cat
使用方法:hdfs dfs -text[-cat]
将文本文件或某些格式的非文本文件通过文本格式输出
hdfs dfs -text /user/hadoop/dir1/a.xml
hdfs dfs -cat /user/hadoop/dir1/a.xml
5. get
使用方法:hdfs dfs -get [src] [localdist]
将 HDFS 中的文件被复制到本地
hdfs dfs -get /user/hadoop/dir1/a.xml ~/tmp/user/
6. rm (-R)
使用方法:hdfs dfs -rm (-R) [path]
每次可以删除多个文件或目录
# 删除指定的文件。只删除空目录或文件
[root@bigdata11 ~]# hdfs dfs -rm /user/hadoop/dir1/a.xml
Deleted /user/hadoop/dir1/a.xml
# 删除文件或目录
[root@bigdata11 ~]# hdfs dfs -rm -R /user/hadoop/dir1
Deleted /user/hadoop/dir1
7. chmod
使用方法:hdfs dfs -chmod (-R) [num,num,num] [path]
改变文件的权限。使用 -R 将改变在目录结构下递归进行。命令使用者必须是root用户下
[root@bigdata11 ~]# hdfs dfs -chmod 777 /user/hadoop/dir2
[root@bigdata11 ~]# hdfs dfs -ls /user/hadoop/
drwxrwxrwx - root supergroup 0 2020-05-05 21:00 /user/hadoop/dir2
8. copyFromLocal
使用方法:hdfs dfs -copyFromLocal <localsrc> ... <dst>
与 put 相类似,也可以从从键盘 读取输入到 hdfs file 中。
9. copyToLocal
使用方法:hdfs dfs -copyToLocal [src] [localdist]
与 get 相类似,将 HDFS 中的文件被复制到本地。
10. cp
使用方法:hdfs dfs -cp <src> ... <dst>
将文件从 hdfs 中复制到目标路径,允许有多个源路径,此时目标路径必须是目录
[root@bigdata11 ~]# hdfs dfs -mkdir -p /user/hadoop/file1 /user/hadoop/file2
[root@bigdata11 ~]# hdfs dfs -put output/part-r-00000 /user/hadoop/file1
# 将part-r-00000复制到file2文件中
[root@bigdata11 ~]# hdfs dfs -cp /user/hadoop/file1/part-r-00000 /user/hadoop/file2
11. du
使用方法:hdfs dfs -du <path>
显示目录中的所有文件的大小
[root@bigdata11 ~]# hdfs dfs -du /user/hadoop/file1/
55 /user/hadoop/file1/part-r-00000
[root@bigdata11 ~]# hdfs dfs -du /user/hadoop/
0 /user/hadoop/dir2
580 /user/hadoop/dis1
55 /user/hadoop/file1
55 /user/hadoop/file2
[root@bigdata11 ~]#
12. expunge
使用方法:hdfs dfs -expunge
用来清空回收站,hdfs 回收站默认不开启
13. getmerge
使用方法:hdfs dfs -getmerge <src> <local>
将 hdfs 指定目录下所有文件排序后合并到 local 指定的文件中,文件不存在时会自动创建,文件存在时会覆盖里面的内容。
[root@bigdata11 ~]# cp input/wc.txt input/wc2.txt
[root@bigdata11 ~]# hdfs dfs -put input/* /user/hadoop/file2
[root@bigdata11 ~]# hdfs dfs -getmerge /user/hadoop/file2 input/newWC.txt
14. mv
使用方法:hdfs dfs -mv <src> ... <dist>
移动 HDFS 上的文件
hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2
15. tail
使用方法:hdfs dfs -tail [-f] <path>
将文件尾部 1KB 字节的内容输出到控制台中
16. touchz
使用方法:hdfs dfs -touchz <pathname>
创建一个空文件
Hadoop 系统管理命令
Hadoop 除了操作文件系统外,还提供了系统的管理命令,包括开启服务、关闭服务、格式化、安全模式设置等命令:
查看 Hadoop 版本
[root@bigdata11 ~]# hadoop version
启动和停止 Hadoop 所有进程
[root@bigdata11 ~]# start-all.sh
[root@bigdata11 ~]# stop-all.sh
格式化一个新的分布式文件系统
[root@bigdata11 ~]# hadoop namenode -format
启动和停止 NameNode
[root@bigdata11 ~]# start-dfs.sh
[root@bigdata11 ~]# stop-dfs.sh
启动和停止 Yarn
[root@bigdata11 ~]# start-yarn.sh
[root@bigdata11 ~]# stop-yarn.sh
平衡 hdfs 文件块分布
如果管理员发现某些 DataNode 保存数据过多,某些 DataNode 保存数据相对较少,可以使用上述命令手动启动内部的均衡过程。
[root@bigdata11 ~]# hadoop balancer
Hadoop 安全模式
NameNode 在启动时会自动进入安全模式,安全模式时 NameNode 的一种状态,在这个阶段,文件系统不允许有任何修改。安全模式的目的在系统启动时检查各个 DataNode 上的数据块有效性,同时根据策略对数据块进行必要的复制或删除,当数据块副本满足最小副本数条件时,会自动退出安全模式。
注:当 HDFS 进入安全模式后,会导致 Hive 和 HBase 的启动异常 。
使用方式
Usage: hdfs dfsadmin [-safemode enter | leave | get | wait | forceExit]
查看 Hadoop 是否处于安全模式
[root@bigdata11 ~]# hdfs dfsadmin -safemode get
Safe mode is OFF
手动进入安全模式
[root@bigdata11 ~]# hdfs dfsadmin -safemode enter
Safe mode is ON
此时进入安全模式状态。
退出安全模式
[root@bigdata11 ~]# hdfs dfsadmin -safemode leave
Safe mode is OFF
此时已退出安全模式状态。
列出所有当前支持的命令
[root@bigdata11 ~]# hdfs dfsadmin -help